import java.util.Arrays;
import java.util.Scanner;

public class Test {
    //数字置换
    private static void reverse(int[] array){
        if (array == null){
            return;
        }
        int i = 0;
        int j = array.length-1;
        while (i<j) {
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
            //array所指向的起始地址没变，但该起始地址对应的对象的元素值已经改变
            i++;
            j--;
        }
    }
    public static void bubbleSort(int[] array){
        if (array == null){
            return;
        }
        //冒泡排序
        //注意，i和j均是从0开始算起，起始条件注意变换
        for (int i = 1; i < array.length; i++) {//五个元素需要传递四趟，第一趟需要传递四次；第二次只有四个元素需要排序，则只需要传递三次
            boolean flg = false;//判断是否需要继续排序
            for (int j = 0; j < array.length-i; j++) {//本质上是说这个循环，每次给下一个if判断条件几个j的值，此行代码每次都会给元素减2的j的值，这样那最后一趟还要排四次，很累赘
                //所以要把i带入进去，减少后期的运算
                if (array[j]>array[j+1]){//j传递了几个值，就代表传递了几次
                    int tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                    flg = true;
                }
                }//j从头到尾排序后没有要交换的值
            if (!flg){
                return;//直接结束方法
            }
        }
    }
    public static String myToString(int[] array){
        //直接输出字符串
        String ret = "[";
        if (array == null){
            return "null";
        }
        if (array.length == 0){
            return "[]";
        }
        for (int i = 0; i < array.length; i++) {
            ret += array[i];//ret = "[",所以可以直接拼接数字
            if (i != array.length-1) {
                ret += ",";
            }
        }
        ret += "]";
        return ret;
    }
    public static void main(String[] args) {

        int[] array = {12,34,1,56,2,6,3,7,8};
        reverse(array);
        System.out.println(myToString(array));//直接输出字符串
//        bubbleSort(array);
//        System.out.println(myToString(array));
//        int[] array5 = null;
//        bubbleSort(array5);

        //  Arrays.toString()直接输出字符串
//        Arrays.sort(array,0,3);//对数组进行排序,[0,3)
//        System.out.println(myToString(array));
//        int[] array2 = null;
//        System.out.println(Arrays.toString(array2));
    }

















    public static int[] fuc4(){//int[]表示返回值类型，public static是修饰符
        int[] ret = new int[2];
        ret[0]=99;
        ret[1]=199;
        return ret;//返回了一个ret所指向的对象起始地址，该地址所指向的堆的对象已经赋值完毕
    }
    public static void main4(String[] args) {
        int[] ret = fuc4();//将fuc4的返回值赋值给数组ret，地址不变，所以对象也没变
        for (int i = 0; i <=1 ; i++) {
            System.out.println(ret[i]);
        }
    }
    public static void fuc3(int[] a){
        a[0] = 99;//array传进来时已经彻底改变了值，值改不改变主要看操作
        System.out.println("a[0]="+a[0]);
    }
    public static void main2(String[] args) {
        int[] array = {1,2,3};
        fuc3(array);
        System.out.println("array[0]="+array[0]);
    }
    public static void fuc1(int[] array){
        array[0]=99;
    }
    public static void fuc2(int[] array){
        array = new int[]{11,22,33,44,55};
    }
    public static void main1(String[] args) {
          int[] array ={1,2,3,4};
          fuc2(array);
        for (int x:array) {//把array所指向的对象的元素的值依次赋值给x
            System.out.print(x+" ");
        }
        System.out.println();

//        int a = 10;
//        int b = 20;
//        int[] array = new int[]{1,2,3,4};//array是一个引用变量（存储对象在堆中空间的起始地址），指向一个数组对象，而且array也是一个局部变量
//        int[] array = {1,2,3,4};
//        for (int i = 0; i < array.length; i++) {
//            System.out.print(array[i]+" ");
//        }
//        System.out.println();
//        for (int x:array) {//把array上的元素赋值给x
//            System.out.print(x+" ");
//        }
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int[] array;
//        array = new int[10];
//        int[] array = {1,2,3,4};
//        int[] array1 = {1,2,3,4};
//        int[] array2 = new int[n];
//        int len = array1.length;
//        System.out.println(array1.length);//数组名.length
//        System.out.println(array[0]);
//        System.out.println(array[1]);
//        System.out.println(array[2]);
//        System.out.println(array[3]);
//        System.out.println(array1[3]);
//        System.out.println(array2[3]);
    }
}
